package com.zhulei.biji.suanfa.pace;

/**
 * @description:
 * @author: zhulei
 * @create: 2025-03-10 10:10
 **/
public class ShortestSubarray {
    /**
     * 给你一个整数数组 nums 和一个整数 k ，找出 nums 中和至少为 k 的 最短非空子数组 ，并返回该子数组的长度。如果不存在这样的 子数组 ，返回 -1 。
     *
     * 子数组 是数组中 连续 的一部分。
     *
     * 示例 1：
     *
     * 输入：nums = [1], k = 1
     * 输出：1
     * 示例 2：
     *
     * 输入：nums = [1,2], k = 4
     * 输出：-1
     * 示例 3：
     *
     * 输入：nums = [2,-1,2], k = 3
     * 输出：3
     * 提示：
     *
     * 1 <= nums.length <= 105
     * -105 <= nums[i] <= 105
     * 1 <= k <= 109
     * Related Topics
     * 队列
     * 数组
     * 二分查找
     * 前缀和
     * 滑动窗口
     * 单调队列
     * 堆（优先队列）
     *
     * 👍 769
     * 👎 0
     */
    public static void main(String[] args) {
        int[] nums = {17,85,93,-45,-21};
        System.out.println(shortestSubarray(nums,150));
    }

    public static int shortestSubarray(int[] nums, int k) {
        int j = 0,i=0 ,len = Integer.MAX_VALUE,temp =0;
        while (i<nums.length){
            temp = temp + nums[j];
            if (temp >= k){
                temp = 0;
                len = Math.min(j - i + 1, len);
                i++;
                j = i;
                continue;
            }
            j++;
            if (j>= nums.length){
                i++;
                j = i;
                temp = 0;
            }
        }
        if (len == Integer.MAX_VALUE)
            return -1;
        return len;
    }

}
